package com.jml.jdk8;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;

/**
 * @author:jml
 * @date: 2019/7/15 0015 22:24
 * @description：
 */
public class Test3 {

    public static void main(String[] args) {
        new Thread(()->{
            System.out.println("myThread");
        });

        //使用lambda 将list1中转为大写后元素移到list2中，并且打印list2的元素
        List<String> list1 = Arrays.asList("a", "b", "c");
        //在jdk1.8中后面泛型可以不用写，编译器会自己推断出类型
        ArrayList<String> list2 = new ArrayList<>();
        list1.forEach(item->list2.add(item.toUpperCase()));
        list2.forEach(item-> System.out.println(item));

        //先将list转化为流，将流中的元素进行遍历转化为大写
        list1.stream().map(item->item.toUpperCase()).forEach(item-> System.out.println(item));
        //toUpperCase输入就是前面调用的字符串，输出就是return
        list1.stream().map(String::toUpperCase).forEach(item-> System.out.println(item));

//toUpperCase方法是不接受参数的，但是有一个返回类型String，正常调用这个方法要是String的对象去调用这个方法
//String::toUpperCase;  表示就是用类的类型直接引用实例方法   格式为： 类的类型::对象的引用方法
//这种格式所对应的的lambda表达式第一个参数，就是调用这个方法的对象。item->item.toUpperCase()，等价于item
// Function<String,String>泛型中的第一个参数就是输入参数类型
        Function<String,String> function  = String::toUpperCase;
        System.out.println(function.getClass().getInterfaces()[0]);

    }

}
